/**
 *
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃神兽保佑
 * 　　　　┃　　　┃代码无BUG！
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━神兽出没━━━━━━coder-zhouxiongwei
 */
/**
 * Created by zhouxiongwei on 2019.04.03
 */

var DBFactory = require('../db/mysql_db');
var usersDao = module.exports;
var async = require('async');
require('../util/common');

usersDao.login = function (data, cb) {
    if (!data) {
        cb(new Error(500));
    } else {
        DBFactory.getConnection(function (error, connection) { //使用transaction进行转账
            if (error) {
                console(1);
                cb(error);
            } else {
                async.waterfall([
                    // 开始Transaction
                    function (callback) {
                        connection.beginTransaction(function (err) {
                            callback(err);
                        });
                    },
                    function (callback) {
                        //进行签名
                        var user = {
                            user_id: data.user_id,
                            password: data.password,
                            time: data.time
                        }

                        var param = getSortObjByAsciiWithObj(user, 'zxw201905142059'); //和前端采用一致的签名sign加密方式
                        console.log(param);

                        if (param.sign == data.sign) { //如果加密签名和前端加密sign一致则验证成功
                            try {
                                //签名验证成功，解密password
                                var password = Decrypt(user.password);
                                if (password.length == 0) {
                                    callback({
                                        status: 201,
                                        msg: '密码经AES解密失败!'
                                    }, false, null);
                                } else {
                                    password = encryPassword(password);
                                    callback(null, {
                                        status: 200,
                                        user_id: user.user_id,
                                        password: password
                                    });
                                }
                            } catch (e) {
                                console.log(e);
                                callback({
                                    status: 201,
                                    msg: e
                                }, false, null);
                            }

                        } else { //否则验证失败
                            callback({
                                status: 201,
                                msg: '签名验证失败！'
                            }, false, null);
                        }
                    },
                    function (user, callback) {
                        if (user.status != 200) {
                            callback({
                                status: 201,
                                msg: '操作异常！'
                            }, false, null);
                        } else {
                            var sql = 'select * from users where username = ?'
                            connection.query(sql, [user.user_id], function (err, result) {
                                if (err) {
                                    callback({
                                        status: 201,
                                        msg: '查找用户失败！'
                                    }, false, null);
                                } else {
                                    if (!result[0]) {
                                        callback({
                                            status: 201,
                                            msg: '用户不存在！'
                                        }, false, null);
                                    } else {
                                        if(user.password == result[0].password){
                                            callback(err, true, {
                                                status: 200,
                                                msg: '用户登陆成功'
                                            });
                                        }else{
                                            callback({
                                                status: 201,
                                                msg: '密码不正确！'
                                            }, false, null);
                                        }
                                        
                                    }
                                }
                            });
                        }
                    },
                ], function (DbErr, isSuccess, uidOrInfo) {
                    if (DbErr) {
                        connection.rollback(function () {
                            connection.release();
                            cb(DbErr);
                        });
                    } else if (!isSuccess) {
                        connection.rollback(function () {
                            connection.release();
                            cb(DbErr);
                        });
                    } else {
                        connection.commit(function (e) {
                            if (e) {
                                connection.rollback(function () {
                                    connection.release();
                                    cb(e);
                                });
                            } else {
                                connection.release();
                                cb(null, uidOrInfo);
                            }
                        });
                    }
                });
            }
        });
    }
}